package com.learn.failToFinished;
/*
67. 二进制求和
给你两个二进制字符串，返回它们的和（用二进制表示）。

输入为 非空 字符串且只包含数字 1 和 0。
 */
public class num_67 {
    public static String addBinary(String a, String b) {
        //需要考虑进位问题
        //能将字符串拆分成字符数组吗？不可->拆分了也是字符，不是int类型，不能直接计算
        StringBuilder sb = new StringBuilder();
        int carry = 0;
        for(int i = a.length() - 1, j = b.length() - 1;i >= 0 || j >= 0; i--, j--) {
            int sum = carry;
//            System.out.println("charAt:"+a.charAt(i));
//            System.out.println(a.charAt(i)-'0');
            sum += i >= 0 ? a.charAt(i) - '0' : 0;
            sum += j >= 0 ? b.charAt(j) - '0' : 0;
            sb.append(sum % 2);
            carry = sum / 2;
        }
        System.out.println(a.charAt(0)-'0');
        sb.append(carry == 1 ? carry : "");
        return sb.reverse().toString();

    }

    public static void main(String[] args) {
//
//        StringBuffer sb=new StringBuffer();
//        sb.append("a");
//        sb.append("b");

        String a="100111111";
        String b="1001";//实际应该为01001，长度为4
        //那么，在a中，需要进行运算的就是后4位，其余需要结合进位判断
        addBinary(a,b);
    }
}
